package cn.tannn.cat.file.sdk.bean;

import cn.tannn.cat.file.sdk.enums.StorageDict;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 文件索引，快速查询各个存储器的文件数据
 *
 * @author <a href="https://tannn.cn/">tan</a>
 * @date 2024/3/7 13:18
 */
@Getter
@Setter
@ToString
public class FileIndex {

    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;


    /**
     * 存储器配置id[FileStorage.id]
     * 对真实文件进行操作是需要拿到其存储的配置
     */
    private Long storageId;


    /**
     * 字典值[Dict.value] storageId的冗余字段
     */
    private String storage;


    /**
     * 原文件名
     */
    private String originalName;

    /**
     * 新文件名
     */
    private String freshName;

    /**
     * 文件路径(存储在设备里的真实路径) [本地磁盘是全路径，oss是不带bucket的全路径
     */
    private String path;

    /**
     * 子路径[文件除开根路径的子路径]
     * <p>本地文件根路径=uploadDir</p>
     * <p>s3根路径=桶</p>
     */
    private String subPath;

    /**
     * 完整的文件URL
     */
    private String url;

    /**
     * 文件URL后缀[去除了url中的域名或者ip,那个在一些场合可以由前端自定义]
     */
    private String urlSuffix;


    /**
     * 存储的桶
     */
    private String bucket;


    /**
     * 文件在桶中的路径[桶加子路径和本身]
     */
    private String bucketPath;


    /**
     * 文件类型[contentType]
     */
    private String type;

    /**
     * 文件大小
     */
    private Long size;


    /**
     * 文件大小[GB,MB,KB]
     */
    private String sizeUnit;

    /**
     * 本地存储
     */
    public boolean localStorage(){
        return storage.equals(StorageDict.LOCAL_STORAGE.getValue());
    }

    /**
     * minio
     */
    public boolean minioStorage(){
        return storage.equals(StorageDict.MINIO_STORAGE.getValue());
    }

    /**
     * 七牛
     */
    public boolean qiNiuStorage(){
        return storage.equals(StorageDict.QINIU_STORAGE.getValue());
    }

    /**
     * ftp
     */
    public boolean ftpStorage(){
        return storage.equals(StorageDict.FTP_STORAGE.getValue());
    }
}
